jQuery(document).ready(function(){
			
	if(get_cookie('chat_min') == '1'){
		jQuery('#uchat').css({marginRight:"-22%"});
		jQuery('#respond').css({display:"none"});				
	}
	
	jQuery('#chat_min').click(function(){
		if(get_cookie('chat_min') != '1'){
			set_cookie('chat_min', '1');
			jQuery('#uchat').animate({
				marginRight:"-22%"
			}, 500, function(){
				jQuery('#respond').css({display:"none"});
			});
		}else{
			set_cookie('chat_min', '0');
			jQuery('#respond').css({display:"block"});
			jQuery('#uchat').animate({
				marginRight:"0"
			}, 500);
		}
	});
	
	// Запускаем метод init, когда документ будет готов:
	chat.init();
	
});

var chat = {
	
	// data содержит перменные для использования в классах:
	
	data : {
		lastID 		: 0
	},
	
	// Init привязывает обработчики событий и устанавливает таймеры:
	
	init : function(){
		
		// Используем перменную working для предотвращения
		// множественных отправок формы:
		
		var working = false;
		
		// Регистриуем персону в чате:
		

		jQuery.tzPOST('login',{name: uzerlogin},function(r){
			working = false;
			chat.login(r.name);
		});
			
		
		// Отправляем данные новой строки чата:
		
		jQuery('#submitForm').submit(function(){
			
			var text = jQuery('#chatText').val();
			
			if(text.length == 0){
				return false;
			}
			
			if(working) return false;
			working = true;
			
			/*
			var tempID = 't'+Math.round(Math.random()*1000000),
				params = {
					id			: tempID,
					author		: chat.data.name,
					text		: text.replace(/</g,'&lt;').replace(/>/g,'&gt;')
				};*/

			// Используем метод addChatLine, чтобы добавить чат на экран 
			// немедленно, не ожидая заверщения запроса AJAX:
			
			//chat.addChatLine(jQuery.extend({},params));
			
			// Используем метод tzPOST, чтобы отправить чат
			// черех запрос POST AJAX:
			
			jQuery.tzPOST('submitChat',jQuery(this).serialize(),function(r){
				working = false;
				
				jQuery('#chatText').val('');
				//jQuery('div.chat-'+tempID).remove();
				
				
				//params['id'] = r.insertID;
				//chat.addChatLine(jQuery.extend({},params));
			});
			
			return false;
		});
		
		// Проверяем состояние подключения пользователя (обновление браузера)
		
		jQuery.tzGET('checkLogged',function(r){
			if(r.logged){
				chat.login(r.loggedAs.name);
			}
		});
		
		// Самовыполняющиеся функции таймаута
		
		(function getChatsTimeoutFunction(){
			chat.getChats(getChatsTimeoutFunction);
		})();
		
		(function getUsersTimeoutFunction(){
			chat.getUsers(getUsersTimeoutFunction);
		})();
		
	},
	
	// Метод login скрывает данные регистрации пользователя
	// и выводит форму ввода сообщения
	
	login : function(name){
		chat.data.name = name;
	},
	
	// Метод render генерирует разметку HTML, 
	// которая нужна для других методов:
	
	render : function(template,params){
		
		var arr = [];
		switch(template){
			case 'chatLine':
				arr = [
					'<li class="chat chat-',params.id,'"><span class="author">',params.author,
					':</span><span class="time">',params.time,'</span><span class="text">',params.text,'</span></li>'];
			break;
			
			case 'user':
				arr = [
					params.name
				];
			break;
		}
		
		// Единственный метод join для массива выполняется 
		// бысстрее, чем множественные слияния строк
		
		return arr.join('');
		
	},
	
	// Метод addChatLine добавляет строку чата на страницу
	
	addChatLine : function(params){
		
		// Все показания времени выводятся в формате временного пояса пользователя
		
		var d = new Date();
		if(params.time) {
			
			// PHP возвращает время в формате UTC (GMT). Мы используем его для формирования объекта date
			// и дальнейшего вывода в формате временного пояса пользователя. 
			// JavaScript конвертирует его для нас.
			
			d.setUTCHours(params.time.hours,params.time.minutes);
		}
		
		params.time = (d.getHours() < 10 ? '0' : '' ) + d.getHours()+':'+
					  (d.getMinutes() < 10 ? '0':'') + d.getMinutes();
		
		var markup = chat.render('chatLine',params),
			exists = jQuery('#chatLineHolder .chat-'+params.id);

		if(exists.length){
			exists.remove();
		}
		
		if(!chat.data.lastID){
			// Если это первая запись в чате, удаляем 
			// параграф с сообщением о том, что еще ничего не написано:
			
			jQuery('#chatLineHolder p').remove();
		}
		
		// Если это не временная строка чата:

			var previous = jQuery('#chatLineHolder .chat-'+(+params.id - 1));
			jQuery('#chatLineHolder').prepend(markup);
		
	},
	
	// Данный метод запрашивает последнюю запись в чате
	// (начиная с lastID), и добавляет ее на страницу.
	
	getChats : function(callback){
		jQuery.tzGET('getChats',{lastID: chat.data.lastID},function(r){
			
			for(var i=0;i<r.chats.length;i++){
				chat.addChatLine(r.chats[i]);
			}
			
			if(r.chats.length){
				chat.data.lastID = r.chats[i-1].id;
			}
			/*
			if(!chat.data.lastID){
				chat.data.jspAPI.getContentPane().html('<p class="noChats">Ничего еще не написано</p>');
			}*/
			
			// Устанавливаем таймаут для следующего запроса
			// в зависимости активности чата:
			
			var nextRequest = 1000;
		
			setTimeout(callback,nextRequest);
		});
	},
	
	// Запрос списка всех пользователей.
	
	getUsers : function(callback){
		jQuery.tzGET('getUsers',function(r){
			
			var users = [];
			
			for(var i=0; i< r.users.length;i++){
				if(r.users[i]){
					if(i == 0){
						users.push(chat.render('user',r.users[i]));
					}else{
						users.push(', ' + chat.render('user',r.users[i]));
					}
				}
			}
			
			jQuery('#chatUsers').html('<b>Онлайн: </b>' + users.join(''));
			
			setTimeout(callback,15000);
		});
	},
	

};

// Формирование GET & POST:

jQuery.tzPOST = function(action,data,callback){
	jQuery.post('/chat/ajax.php?action='+action,data,callback,'json');
}

jQuery.tzGET = function(action,data,callback){
	jQuery.get('/chat/ajax.php?action='+action,data,callback,'json');
}


function set_cookie(name, value){
	var valueEscaped = escape(value);
	var expiresDate = new Date();
	expiresDate.setTime(expiresDate.getTime() + 365 * 24 * 60 * 60 * 1000);
	var expires = expiresDate.toGMTString();
	var newCookie = name + "=" + valueEscaped + "; path=/; expires=" + expires;
	if (valueEscaped.length <= 4000) document.cookie = newCookie + ";";
}

function get_cookie(name){
	var prefix = name + "=";
	var cookieStartIndex = document.cookie.indexOf(prefix);
	if (cookieStartIndex == -1) return null;
	var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
	if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
	return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}